io-ts-docopt
Decode docopt output with io-ts
Docopt is a fantastic argument-parsing tool, but suffers from a few drawbacks:
- The returned object has awkward keys like
<name>
that cannot be
accessed with the dot accessor - Arguments (except flags) are always parsed as strings
This project combines docopt with io-ts to overcome both
inconveniences, by first parsing arguments with docopt, then
decoding and then encoding the parsed value through the specified
io-ts codec. This sequence provides the opportunity to remap gnarly
keys into more convenient identifiers, as well as decode values from
one type into another (for example, with the NumberFromString
codec).
Install
npm install io-ts-docopt
Use
import { decodeDocopt, withEncode } from 'io-ts-docopt'
const docstring = `
Usage:
foo --clean <one> <two> <many>...
`
const codec = withEncode(
iots.type({
'--clean': iots.boolean,
'<one>': iots.string,
'<two>': iots.string,
'<many>': iots.array(iots.string)
}),
(a) => ({
clean: a['--clean'],
one: a['<one>'],
two: a['<two>'],
many: a['<many>']
})
)
decodeDocopt(
codec,
docstring,
{argv: `--clean red blue green purple yellow`.split(/\s+/)}
)
Documentation
See generated documentation.
Acknowledgments